/* 代码2-13 带头结点的单链表中的删除 */
void Remove(List list, int i) {
    /* i是删除元素的位置序号，从1开始 */
    Position deleted_node, p;
    int counter;

    if (i < 1) { /* 删除位置不合法，退出 */
        printf("ERROR\n");
        return;
    }
    p = list->head;
    counter = 0;
    while ((p != NULL) && (counter < (i - 1))) {
        p = p->next;
        counter++;
    }
    if ((p != NULL)
            && (p->next != NULL)) { /* p指向第 (i-1)个结点，且待删除结点存在 */
        deleted_node = p->next;
        p->next = deleted_node->next;
        free(deleted_node);
        list->length--;
    } else { /* 删除位置不合法，退出 */
        printf("ERROR\n");
    }
}
/* 代码2-13 结束 */